# coding=utf-8

from logging import getLogger

LOG = getLogger(__file__)

"""
本地服务管理程序
1) 首先需要获得运行的服务列表, 此列表保持在Zookeeper上. 所以要先尝试连接Zookeeper, 如果连接不上,则会一直尝试连接.
当连接到zookeeper上后,需要读取/deploy/<host_ip>/services/下面的所有的服务节点.

2) 接下来根据获取的服务列表,并查看/etc/dsms/scripts/路径下是否有对应的运行脚本.
如果没有,则从数据库中读取这个服务对应的启动/停止/查询状态脚本. 如果数据库无法连接,那么就等待直到连接成功.
如果连接成功,就可以查询dsms数据库的service_scripts表

3) 根据得到脚本得到的内容,写入到本地指定的路径上,变成真正的运行脚本,并给脚本增加运行权限.

4) 开始运行状态检查程序: 启动一个线程通过调用所有的脚本来检查每个服务的运行状态.

5) 如果服务没有运行,那么就尝试启动此服务; 如果服务启动不成功,则记录此次事件,并判断此服务是否为本地服务(每个节点都需要运行的服务),
如果是本地服务,就继续每隔一定时间尝试启动此服务,知道成功.在此过程中,向上汇报所有相关事件.

6) 本地服务管理程序向上提供服务的运行状态给管理节点,用于显示给最终用户.

"""

import dns
import network
import config

class LocalServiceManager(object):
    def run(self):
        """
        开始运行，如果DNS服务所监听的IP没能ping通，那么说明DSN还没有启动。
        则本地注册DNS IP，并启动dns服务。
        :return:
        """
        LOG.info("Start Local Service Manager v0.1")
        if not network.ping(config.DNS_IP):
            dns.run_dnsmasq(config.DNS_IP)
        
        elif not network.ping(config.DNS_standby_IP):
            dns.run_dnsmasq(config.DNS_standby_IP)


if __name__ == "__main__":
    lsm = LocalServiceManager()
    lsm.run()
